#ifndef __NEC_H__
#define __NEC_H__

// func: 接收记录波形，解码NEC协议

#include "GlobalConfig.h"

// NEC 协议参数（单位：微秒）
#define NEC_HEADER_PULSE 9000
#define NEC_HEADER_SPACE 4500
#define NEC_BIT_MARK 560
#define NEC_ONE_SPACE 1690
#define NEC_ZERO_SPACE 560
#define NEC_REPEAT_SPACE 2250
#define NEC_FRAME_BITS 32
// 描述红外波形段的数量
#define IR_WAVE_LINENUMS 256

// NEC 模式
typedef enum
{
    NEC_STANDARD, // 8位地址 + 8位反地址 + 8位命令 + 8位反命令
    NEC_EXTENDED  // 16位地址 + 8位命令 + 8位反命令
} NECMode;

// NEC 帧结构体
typedef struct
{
    uint16_t address; // 地址（标准模式只用低8位）
    uint8_t command;  // 命令
    NECMode mode;     // 协议模式
} NECFrame;

// 红外帧结构体
typedef struct
{
    NECFrame nec;
    uint16_t waveLineNums; // 电平段的数量
    union WaveData_UN
    {
        uint16_t u16[IR_WAVE_LINENUMS];
        uint8_t u8[IR_WAVE_LINENUMS * 2];
    } waveData_un; // 数据
} IrFrame_Def;

extern IrFrame_Def irFrame;
// ========== 接收函数 ==========
bool NEC_Decode(IrFrame_Def *frame);
// 将wave解析成enc
bool WaveBufferToENCFrame(const uint16_t *waveBuffer, uint8_t length, NECFrame *frame);

// 协议转换
void UART_Report(IrFrame_Def *frame);
#endif
